package com.security.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import com.security.pojo.User;

import java.util.List;

@Mapper
public interface UserMapper {

    //只根据用户名查询用户，密码的验证，在内存中处理

    /**
     * Mybatis中的参数问题：
     *  如果只有唯一一个参数，且参数可用。可以直接应用
     *      参数可用，代表，参数类型是简单类型。8种基本类型，对应的包装类型，字符串类型
     *      参数命名任意，#{任意命名}或者${任意命名}
     *  如果有多个参数，且参数类型为简单类型（8基本类型，包装类型，字符串）
     *      参数可以使用下标序号访问。如#{0},#{1} 不推荐使用
     *  如果参数类型是自定义类型，或Map类型，需要提供@Param描述参数
     *      代表为参数一个名称，可以在SQL中使用
     *      如：@Param("abc") String name -> #{abc}
     *      如：@Param("ddd") Map abc -> #{ddd.key}
     *      如：@Param("xyz") User user -> #{xyz.property}
     * @param username
     * @return
     */
    @Select("select id, username, password from tb_user where username = #{username}")
    User selectUserByUserName(String username);

    //根据用户主键，查询角色名称，tb_role(role_name)
    @Select("select role_name from tb_role where id in (select role_id from tb_user_role where user_id = #{id})")
    List<String> selectRolesByUserId(Integer id);

    //根据用户主键,查询资源描述，tb_resource(res)
    @Select("select res from tb_resource where id in (select res_id from tb_role_res where role_id in (select role_id from tb_user_role where user_id = #{id}))")
    List<String> selectResourcesByUserId(Integer id);
}
